#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define VERSION1 (1<<0)// <<左移操作符二进制向左移动一位 右边用0补齐 >>右移操作符反过来
#define VERSION2 (1<<1)
#define VERSION3 (1<<2)
#define VERSION4 (1<<3) 
#define VERSION5 (1<<4)
void ShowVersion(int flags) //& 按位与： 两个条件同时为真(1)的情况下，运算结果为真，说人话就是两个条件都是1才为1，否则为0。
  //|  按位或 ：任意一个条件为真(1)的情况下，运算结果为1，就是只要有一个1则为1，否则为0。
  // ^ 按位异或 ：两个条件中只有一个条件为真(1)的情况下，运算结果为真。也就是说，相异才为 真，相同则为假。
{
  if(flags & VERSION1)
  {
    printf("VERSION1\n");

  }
  if(flags & VERSION2)
  {

    printf("VERSION2\n");
  }
  if(flags & VERSION3)
  {
    
    printf("VERSION3\n");
  }
  if(flags & VERSION4)
  {

    printf("VERSION4\n");
  }
  if(flags &VERSION5)
  {

    printf("VERSION5\n");
  }
}
int main()
{
  /*//向显示器打印字符串的几种方式
  const char* s="hello printf\n";
  printf(s);

  //int fprintf(FILE* stream ,const char* format)
  const char *s2="hello fprintf\n";
  fprintf(stdout, s2);

  //int puts(char* str ,FILE* stream)
  const char *s3 ="hello puts\n";
  fputs(s3,stdout); //不做格式化输出，因为它认为你输入的已经是字符串 

  //size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 输入的可以是二进制也可以是字符串
  const char *s4 ="hello fwrite\n";
  fwrite(s4,strlen(s4),1,stdout);
  return 0;*/


  //位图
  ShowVersion(VERSION1);
  ShowVersion(VERSION1 | VERSION2);
  ShowVersion(VERSION1 | VERSION3 |VERSION4);
  
}
